package DAOHibernate;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;

import modelo.Votacion;

import DAO.VotacionDAO;

public class VotacionDAOhiberjpa implements VotacionDAO {

	private static EntityManagerFactory emf = Persistence
			.createEntityManagerFactory("base-ttps-final");

	@Override
	public boolean buscarVotacion(Long id_tesis, Long id_usuario) {
		int resultado;
		EntityManager em = VotacionDAOhiberjpa.emf.createEntityManager();
		Query consulta = em
				.createQuery(
						"from Votacion v where v.idTesina = :id_tesis and v.idUsuario = :id_usuario")
				.setParameter("id_tesis", id_tesis)
				.setParameter("id_usuario", id_usuario);
		resultado = consulta.getResultList().size();
		em.close();
		if (resultado == 0) {
			return false;
		}
		return true;
	}

	@Override
	public void guardarVotacion(Votacion v) {
		try {
			EntityManager em = VotacionDAOhiberjpa.emf.createEntityManager();
			EntityTransaction etx = em.getTransaction();
			etx.begin();
			em.persist(v);
			em.flush();
			etx.commit();
			em.close();
		} catch (Exception e) {
			e.getMessage();
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Votacion> obtenerTodasLasVotaciones() {
		List<Votacion> resultado;
		EntityManager em = VotacionDAOhiberjpa.emf.createEntityManager();
		String qString = null;
		qString = "from Votacion u";
		Query consulta = em.createQuery(qString);
		resultado = (List<Votacion>) consulta.getResultList();

		return resultado;
	}

	@Override
	public void eliminar(Votacion v) {
		
		try {
			EntityManager em = VotacionDAOhiberjpa.emf.createEntityManager();
			EntityTransaction etx = em.getTransaction();
			etx.begin();
			Query consulta = em.createQuery(
					"DELETE FROM Votacion E where E.id=:id").setParameter("id",
					v.getId());
			consulta.executeUpdate();
			etx.commit();
			em.close();
		} catch (Exception e) {
			e.getMessage();
		}
		
		
	}

}
